<?php
Yii::import('application.modules.menu.utililies.menuService');

class MaterialrequestController extends ControllerBase
{

        public function init() {
            parent::init();
            $this->defaultAction = 'admin';
        }
        
	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
	{
            $materialreqdetail = Materialrequestdetail::model()->findAll(array(
                'condition' => 'materialrequestid = :id',
                'params' => array(
                    ':id' => $id,
                )
            ));
            
            $mateiralreq = Materialrequest::model()->find(array(
                'condition' => 'materialrequestid = :id',
                'params' => array(
                    ':id' => $id,
                )
            ));
            
            $this->render('view',array(
                'materialreqdetail' => $materialreqdetail,
                'materialreq' => $mateiralreq
            ));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new Materialrequestdetail;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['MaterialRequestDetail']))
		{
                    foreach ($_POST['MaterialRequestDetail'] as $mq => $value){
                        foreach ($value as $k => $v){
                            $quantity = preg_replace('/\\s/', '', $v);
                            if (intval($quantity) != 0){                                
                                //insert into material request
                                $materialreq = new Materialrequest;                                
                                $lastID = Util::generalTableID(Materialrequestdetail::model(), 'materialrequestid');
                                if ($lastID)
                                    $materialreq->materialrequestid = ++$lastID;
                                else
                                    $materialreq->materialrequestid = 0;
                                
                                $materialreq->requestdate = date('Y-m-d', time());
                                $materialreq->autogenerated = 0;
                                $materialreq->approved = 1;
                                $materialreq->save();
                                
                                //insert into material request detail
                                $materialreqdetail = new Materialrequestdetail;
                                $materialreqdetail->materialrequesrid = $materialreq->materialrequestid;
                                $materialreqdetail->materialid = $k;
                                $materialreqdetail->quantity = $quantity;
                                $materialreqdetail->delivered = 0;
                                $materialreqdetail->save(); 
                            }                                
                        }
                    }
		}

                $materialList = Material::model()->findAll();
		$this->render('create',array(
                    'materialList'=>$materialList,
		));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Materialrequest']))
		{
			$model->attributes=$_POST['Materialrequest'];
			if($model->save()){
                            $this->setMessage('Update Material Request Successful');
                            $this->refresh();
                        }
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		if(Yii::app()->request->isPostRequest)
		{
			// we only allow deletion via POST request
			$this->loadModel($id)->delete();

			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
		}
		else
			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('Materialrequest');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new Materialrequest('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Materialrequest']))
			$model->attributes=$_GET['Materialrequest'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=Materialrequest::model()->findByPk((int)$id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='materialrequest-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
        
        public function actionApproveRequest($id){
            $materialreq = Materialrequest::model()->findByPk($id);
            $materialreq->approved = 1;
            $materialreq->update();
            
            $this->redirect(CController::createUrl('admin'));
        }
        
        public function actionAlertIncomingRequest(){
            $materialreq = Materialrequest::model()->findAll(array(
                'condition' => 'approved = 0',
            ));
            
            if (count($materialreq)){
                echo CHtml::image(Yii::app()->theme->baseUrl."/images/alert.ico", 'Request Material', array());
             }else echo 0;
        }
        
        public function actionConfirmReceived(){
            $listReceived = isset($_GET['list']) ? $_GET['list'] : null;
            $requestID = isset($_GET['id']) ? $_GET['id'] : null;
            
            if (!is_null($listReceived) && !is_null($requestID)){
                $list = explode(':', $listReceived);
                if (is_array($list) && isset($_GET['id'])){
                   foreach ($list as $value){
                       $materialRequest = MaterialrequestDetail::model();
                       //confirm delivered meterial form client
                       $materialRequest->updateAll(
                               array('delivered' => 1),
                               'materialrequestid = :id AND materialid = :request',
                               array(
                                   ':id' => $requestID,
                                   ':request' => $value
                               )
                       );
                       
                       //get request material quantity
                       $quantity = Materialrequestdetail::model()->find(array(
                           'condition' => 'materialrequestid = :id AND materialid = :request',
                           'params' => array(
                               ':id' => $requestID,
                               ':request' => $value
                           )
                       ));
                       
                       //update sotrage quantity after delivered material
                       $material = Material::model()->find(array(
                           'condition' => 'materialid = :id',
                           'params' => array(
                               ':id' => $value,
                           )
                       ));

                       $material->deliveredquantity = $material->deliveredquantity + $quantity->quantity;
                       if ($material->requestid != null)
                            $material->requestid .= ':'.$requestID;
                       else
                           $material->requestid = $requestID;
                       
                       $material->update(array('deliveredquantity', 'requestid'));
                   }
                }
                echo CJSON::encode(array('confirm received' => true));
				exit(0);
            }else {
				echo CJSON::encode(array('confirm received' => false));
				exit(0);
			}
        }
        
        public function actionMateiralRequest($requestFileName){
            $name = $requestFileName;
            $materialList = file_exists(Yii::getPathOfAlias('webroot')."/uploads/material/".$name.".txt");			

            if ($materialList){
                $fileContent = file_get_contents(Yii::getPathOfAlias('webroot')."/uploads/material/".$name.".txt", FILE_USE_INCLUDE_PATH);				
                $list = explode("\n", $fileContent);
				
				$i=0;
				foreach ($list as $key => $value){
					if (0==$i){
						$lineData = explode(':', $value);
						 $requestID = $lineData[0];
						$requesrDetailID = $lineData[1];
						$autoGen = $lineData[2];
						$approved = $lineData[3];
						
						$requestUser = substr($requestFileName, 1, (strpos($requestFileName, '_') -1) );
						
						$request = new Materialrequest('insert');
						$request->materialrequestid = $requestID;
						$request->autogenerated = $autoGen;
						$request->approved = $approved;
						$request->userid = $requestUser;
					}else if (1==$i){
						$requestDate = intval($value);
						$request->requestdate = $requestDate;
						$request->save();
						//echo '<pre>'; print_r($request->attributes); echo '</pre>';
					}else if (2==$i){
						$materials = explode(',', $value);
						//echo '<pre>'; print_r($materials); echo '</pre>';
					}else if (3==$i){
						$materialQuantity = explode(',', $value);
						//echo '<pre>'; print_r($materialQuantity); echo '</pre>';
						
						for ($x=0,$y=count($materials); $x<$y; $x++){
							$materialRequestDetail = new Materialrequestdetail('insert');
							$materialRequestDetail->materialid = $materials[$x];
							$materialRequestDetail->quantity = $materialQuantity[$x];
							$materialRequestDetail->materialrequestid = $requestID;
							$materialRequestDetail->delivered = 0;
							$materialRequestDetail->save();
							//echo '<pre>'; print_r($materialRequestDetail->attributes); echo '</pre>';
						}
					}else if (4==$i){
						$materialDilieveried = explode(',', $value);
						//echo '<pre>'; print_r($materialDilieveried); echo '</pre>';
					}
					
					$i++;
					if (5==$i) $i=0;
				}
				echo CJSON::encode(array('received' => true));
				exit(0);
            }else{
                echo CJSON::encode(array('received' => false));
				exit(0);
			}
        }
        
        public function actionGenneralMateiralList(){
            $mateiral = array(
                '#3' => array(
                    'userid' => 3,
                    'date' => '2012-07-03',
                    'detail' => array(
                        '1' => 5000,
                        '7' => 10000,
                        '15' => 35000
                    )
                )
            );
            echo '<pre>'; print_r($mateiral); echo '</pre>';
            echo CJSON::encode($mateiral);
        }
}
